package com.liyuxiang.graph.entity;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

/**
 * 症状收集表单实体 - 一次性收集所有必要信息
 * 
 * AI生成示例：
 * {
 *   "title": "症状详情收集",
 *   "description": "请详细填写以下信息，以便为您推荐最合适的科室",
 *   "requireAll": false,
 *   "fields": [
 *     {
 *       "key": "symptom_description",
 *       "label": "主要症状描述", 
 *       "type": "TEXTAREA",
 *       "required": true,
 *       "placeholder": "请详细描述您的症状",
 *       "maxLength": 200,
 *       "description": "详细描述有助于准确分析",
 *       "icon": "💊"
 *     }
 *   ]
 * }
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class SymptomCollectionForm {
    
    /**
     * 表单标题 - 示例: "症状详情收集"
     */
    @JsonProperty("title")
    private String title = "症状详情收集";
    
    /**
     * 表单描述 - 示例: "为了给您推荐最合适的科室，请详细填写以下信息"
     */
    @JsonProperty("description")
    private String description = "为了给您推荐最合适的科室，请详细填写以下信息";
    
    /**
     * 是否必须填写所有字段 - 通常为false
     */
    @JsonProperty("requireAll")
    private boolean requireAll = false;
    
    /**
     * 表单字段列表 - 包含4-6个字段
     */
    @JsonProperty("fields")
    private List<FormField> fields;
    
    /**
     * 表单字段实体
     * 
     * 字段类型说明：
     * - TEXTAREA: 多行文本输入，用于症状描述
     * - RADIO: 单选，用于位置、性质、程度等
     * - CHECKBOX: 多选，用于伴随症状
     * - SLIDER: 滑动条，用于疼痛程度(1-10)
     */
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public static class FormField {
        /**
         * 字段标识符 - 示例: "symptom_location"
         */
        @JsonProperty("key")
        private String key;
        
        /**
         * 字段显示标题 - 示例: "症状位置"
         */
        @JsonProperty("label")
        private String label;
        
        /**
         * 字段类型 - 只能是: TEXTAREA, RADIO, CHECKBOX, SLIDER
         */
        @JsonProperty("type")
        private FieldType type;
        
        /**
         * 是否必填 - true/false
         */
        @JsonProperty("required")
        private boolean required = false;
        
        /**
         * 占位符文本 - 用于TEXTAREA
         */
        @JsonProperty("placeholder")
        private String placeholder;
        
        /**
         * 字段选项 - 用于RADIO和CHECKBOX类型
         */
        @JsonProperty("options")
        private List<FieldOption> options;
        
        /**
         * 默认值
         */
        @JsonProperty("defaultValue")
        private String defaultValue;
        
        /**
         * 最大长度 - 用于TEXTAREA，通常200
         */
        @JsonProperty("maxLength")
        private Integer maxLength;
        
        /**
         * 最小值 - 用于SLIDER，通常1
         */
        @JsonProperty("minValue")
        private Integer minValue;
        
        /**
         * 最大值 - 用于SLIDER，通常10
         */
        @JsonProperty("maxValue")
        private Integer maxValue;
        
        /**
         * 字段描述或提示 - 示例: "详细描述有助于准确分析"
         */
        @JsonProperty("description")
        private String description;
        
        /**
         * 字段图标 - emoji图标，如: "💊", "📍", "⚡"
         */
        @JsonProperty("icon")
        private String icon;
    }
    
    /**
     * 字段选项实体 - 用于单选和多选字段
     * 
     * 颜色说明：
     * - primary: 主要选项(蓝色)
     * - secondary: 次要选项(灰色) 
     * - success: 成功选项(绿色)
     * - warning: 警告选项(橙色)
     * - danger: 危险选项(红色)
     * - default: 默认选项
     */
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public static class FieldOption {
        /**
         * 选项值 - 示例: "upper_abdomen"
         */
        @JsonProperty("value")
        private String value;
        
        /**
         * 选项显示文本 - 示例: "上腹部"
         */
        @JsonProperty("label")
        private String label;
        
        /**
         * 选项图标 - emoji，如: "🔴", "🟡", "🔵"
         */
        @JsonProperty("icon")
        private String icon;
        
        /**
         * 选项颜色类型 - 只能是: primary, secondary, success, warning, danger, default
         */
        @JsonProperty("color")
        private String color = "default";
        
        /**
         * 是否为推荐选项 - true表示默认选中或推荐
         */
        @JsonProperty("recommended")
        private boolean recommended = false;
    }
    
    /**
     * 字段类型枚举
     */
    public enum FieldType {
        TEXTAREA,       // 多行文本输入
        RADIO,          // 单选按钮组
        CHECKBOX,       // 多选框组
        SLIDER          // 滑动条
    }
}